import store from '@/store'
import axios from 'axios'
import { Message } from 'element-ui'
import router from '@/router'
import { getTimeStamp } from './auth'

const Timeout = 3600 // 定义时间超时时差
const service = axios.create({
    baseURL: process.env.VUE_APP_BASE_API,
    timeout: 5000
})

// 请求拦截器
service.interceptors.request.use(config => {
    // config 是请求的配置信息
    // 注入token
    if (store.getters.token) {
        // 有token去检查是否超时
        if (isCheckTimeout()) {
            // 如果它超时了 表示token过期了
            // token没用了 因为超时了
            store.dispatch('user/logout')
            router.push('/login')
            return Promise.reject(new Error('token超时了'))
        } else {

        }
        config.headers['Authorization'] = `Bearer ${store.getters.token}`
    }
    return config // 必须要返回的
}, error => {
    return Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use(
    response => {
        const { success, message, data } = response.data
        if (success) {
            return data
        } else {
            Message.error(message)
            return Promise.reject(new Error(message))
        }
    },
    error => {
        // error中有一个response对象
        // 判断response对象中的code码是否为token失效码来控制跳转
        if (error.response && error.response.data && error.response.code === 10002) {
            store.dispatch('user/logout')
            router.push('login')
        } else {
            Message.error(error.message)
        }
        return Promise.reject(error)
    }
)
// 是否超时
// 超时逻辑 （当前时间戳  - 获取到的时间戳） > 3600
function isCheckTimeout() {
    var currentTime = Date.now() // 当前时间戳
    var timestamp = getTimeStamp()
    return (currentTime - timestamp) / 1000 > Timeout
}

export default service
